Skip to main content
Glama

Next.js MCP Server

by vertile-ai
route.ts4.51 kB
import { NextRequest, NextResponse } from 'next/server'; import { userDb } from '@/lib/db'; import { UserIdSchema, UserUpdateSchema } from '@/lib/validation'; import { ApiResponse, User, UserUpdateInput } from '@/types'; interface RouteContext { params: { id: string; }; } /** * GET /api/users/[id] - Get a user by ID * @param request - The incoming request object * @param context - Contains route parameters * @returns {Promise<NextResponse>} JSON response with user data */ export async function GET( request: NextRequest, context: RouteContext ): Promise<NextResponse<ApiResponse<User>>> { try { const { id } = context.params; // Validate ID format const validatedId = UserIdSchema.safeParse({ id }); if (!validatedId.success) { return NextResponse.json( { error: 'Invalid user ID format', status: 400 }, { status: 400 } ); } // Find user by ID const user = await userDb.getById(id); if (!user) { return NextResponse.json( { error: 'User not found', status: 404 }, { status: 404 } ); } return NextResponse.json( { data: user, status: 200 }, { status: 200 } ); } catch (error) { console.error('Error fetching user:', error); return NextResponse.json( { error: 'Internal server error', status: 500 }, { status: 500 } ); } } /** * PUT /api/users/[id] - Update a user * @param request - The incoming request object with updated user data * @param context - Contains route parameters * @returns {Promise<NextResponse>} JSON response with updated user data */ export async function PUT( request: NextRequest, context: RouteContext ): Promise<NextResponse<ApiResponse<User>>> { try { const { id } = context.params; const body: UserUpdateInput = await request.json(); // Validate ID format const validatedId = UserIdSchema.safeParse({ id }); if (!validatedId.success) { return NextResponse.json( { error: 'Invalid user ID format', status: 400 }, { status: 400 } ); } // Validate request body const validatedData = UserUpdateSchema.safeParse(body); if (!validatedData.success) { return NextResponse.json( { error: 'Invalid request data', message: validatedData.error.message, status: 400 }, { status: 400 } ); } // Update user const updatedUser = await userDb.update(id, validatedData.data); if (!updatedUser) { return NextResponse.json( { error: 'User not found', status: 404 }, { status: 404 } ); } return NextResponse.json( { data: updatedUser, message: 'User updated successfully', status: 200 }, { status: 200 } ); } catch (error) { console.error('Error updating user:', error); return NextResponse.json( { error: 'Internal server error', status: 500 }, { status: 500 } ); } } /** * DELETE /api/users/[id] - Delete a user * @param request - The incoming request object * @param context - Contains route parameters * @returns {Promise<NextResponse>} JSON response confirming deletion */ export async function DELETE( request: NextRequest, context: RouteContext ): Promise<NextResponse<ApiResponse<null>>> { try { const { id } = context.params; // Validate ID format const validatedId = UserIdSchema.safeParse({ id }); if (!validatedId.success) { return NextResponse.json( { error: 'Invalid user ID format', status: 400 }, { status: 400 } ); } // Delete user const deleted = await userDb.delete(id); if (!deleted) { return NextResponse.json( { error: 'User not found', status: 404 }, { status: 404 } ); } return NextResponse.json( { message: 'User deleted successfully', status: 200 }, { status: 200 } ); } catch (error) { console.error('Error deleting user:', error); return NextResponse.json( { error: 'Internal server error', status: 500 }, { status: 500 } ); } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vertile-ai/next-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server